<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../../../../../../../style.css" type="text/css" media="screen">
<link rel="stylesheet" href="../../../../../../../print.css" type="text/css" media="print">
<meta content="PolygonPolygonDetector,org.generalrelativity.foam.dynamics.collision.fine.sat.PolygonPolygonDetector,body1,body2,minDistance,penetrationAxis,EPSILON,hasCollision,getContacts" name="keywords">
<title>org.generalrelativity.foam.dynamics.collision.fine.sat.PolygonPolygonDetector</title>
</head>
<body>
<script type="text/javascript" language="javascript" src="../../../../../../../asdoc.js"></script><script type="text/javascript" language="javascript" src="../../../../../../../cookies.js"></script><script type="text/javascript" language="javascript">
<!--
				asdocTitle = 'PolygonPolygonDetector - API Documentation';
				var baseRef = '../../../../../../../';
				window.onload = configPage;
			--></script>
<table style="display:none" id="titleTable" cellspacing="0" cellpadding="0" class="titleTable">
<tr>
<td align="left" class="titleTableTitle">API Documentation</td><td align="right" class="titleTableTopNav"><a onclick="loadClassListFrame('../../../../../../../all-classes.html')" href="../../../../../../../package-summary.html">All&nbsp;Packages</a>&nbsp;|&nbsp;<a onclick="loadClassListFrame('../../../../../../../all-classes.html')" href="../../../../../../../class-summary.html">All&nbsp;Classes</a>&nbsp;|&nbsp;<a onclick="loadClassListFrame('../../../../../../../index-list.html')" href="../../../../../../../all-index-A.html">Index</a>&nbsp;|&nbsp;<a href="../../../../../../../index.html?org/generalrelativity/foam/dynamics/collision/fine/sat/PolygonPolygonDetector.html&amp;org/generalrelativity/foam/dynamics/collision/fine/sat/class-list.html" id="framesLink1">Frames</a><a onclick="parent.location=document.location" href="" style="display:none" id="noFramesLink1">No&nbsp;Frames</a></td><td rowspan="3" align="right" class="titleTableLogo"><img alt="Adobe Logo" title="Adobe Logo" class="logoImage" src="../../../../../../../images/logo.jpg"></td>
</tr>
<tr class="titleTableRow2">
<td align="left" id="subTitle" class="titleTableSubTitle">Class&nbsp;PolygonPolygonDetector</td><td align="right" id="subNav" class="titleTableSubNav"><a href="#propertySummary">Properties</a>&nbsp;| <a href="#methodSummary">Methods</a>&nbsp;| <a href="#constantSummary">Constants</a></td>
</tr>
<tr class="titleTableRow3">
<td colspan="2">&nbsp;</td>
</tr>
</table>
<script type="text/javascript" language="javascript">
<!--
if (!isEclipse() || window.name != ECLIPSE_FRAME_NAME) {titleBar_setSubTitle("Class PolygonPolygonDetector"); titleBar_setSubNav(true,true,false,false,false,false,true,false,false,false,false,false,false,false);}
--></script>
<div class="MainContent">
<table cellspacing="0" cellpadding="0" class="classHeaderTable">
<tr>
<td class="classHeaderTableLabel">Package</td><td><a onclick="javascript:loadClassListFrame('class-list.html')" href="package-detail.html">org.generalrelativity.foam.dynamics.collision.fine.sat</a></td>
</tr>
<tr>
<td class="classHeaderTableLabel">Class</td><td class="classSignature">public class PolygonPolygonDetector</td>
</tr>
<tr>
<td class="classHeaderTableLabel">Implements</td><td><a href="../../IFineCollisionDetector.html">IFineCollisionDetector</a></td>
</tr>
</table>
<p></p>
<p></p>
<br>
<hr>
</div>
<a name="propertySummary"></a>
<div class="summarySection">
<div class="summaryTableTitle">Public Properties</div>
<table id="summaryTableProperty" class="summaryTable " cellpadding="3" cellspacing="0">
<tr>
<th>&nbsp;</th><th colspan="2">Property</th><th class="summaryTableOwnerCol">Defined&nbsp;by</th>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol"><a class="signatureLink" href="#body1">body1</a> : <a href="../../../element/IBody.html">IBody</a>
<div class="summaryTableDescription"> first body in detection </div>
</td><td class="summaryTableOwnerCol">PolygonPolygonDetector</td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol"><a class="signatureLink" href="#body2">body2</a> : <a href="../../../element/IBody.html">IBody</a>
<div class="summaryTableDescription"> second body in detection </div>
</td><td class="summaryTableOwnerCol">PolygonPolygonDetector</td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol"><a class="signatureLink" href="#minDistance">minDistance</a> : Number<div class="summaryTableDescription"> minimum distance along the pentration axis required to resolve penetration </div>
</td><td class="summaryTableOwnerCol">PolygonPolygonDetector</td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol"><a class="signatureLink" href="#penetrationAxis">penetrationAxis</a> : <a href="../../../../math/Vector.html">Vector</a>
<div class="summaryTableDescription"> most direct vector out of penetration </div>
</td><td class="summaryTableOwnerCol">PolygonPolygonDetector</td>
</tr>
</table>
</div>
<a name="methodSummary"></a>
<div class="summarySection">
<div class="summaryTableTitle">Public Methods</div>
<table id="summaryTableMethod" class="summaryTable " cellpadding="3" cellspacing="0">
<tr>
<th>&nbsp;</th><th colspan="2">Method</th><th class="summaryTableOwnerCol">Defined&nbsp;by</th>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="#PolygonPolygonDetector()">PolygonPolygonDetector</a>(body1:<a href="../../../element/IBody.html">IBody</a>, body2:<a href="../../../element/IBody.html">IBody</a>)</div>
<div class="summaryTableDescription">
   Creates a new PolygonPolygonDetector
   
   </div>
</td><td class="summaryTableOwnerCol">PolygonPolygonDetector</td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="#getContacts()">getContacts</a>():Array</div>
<div class="summaryTableDescription">
   Generates contacts based on found collision.</div>
</td><td class="summaryTableOwnerCol">PolygonPolygonDetector</td>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol">
<div class="summarySignature">
<a class="signatureLink" href="#hasCollision()">hasCollision</a>():Boolean</div>
<div class="summaryTableDescription">
   Determines whether the 2 bodies are intersecting.</div>
</td><td class="summaryTableOwnerCol">PolygonPolygonDetector</td>
</tr>
</table>
</div>
<a name="constantSummary"></a>
<div class="summarySection">
<div class="summaryTableTitle">Public Constants</div>
<table id="summaryTableConstant" class="summaryTable " cellpadding="3" cellspacing="0">
<tr>
<th>&nbsp;</th><th colspan="2">Constant</th><th class="summaryTableOwnerCol">Defined&nbsp;by</th>
</tr>
<tr class="">
<td class="summaryTablePaddingCol">&nbsp;</td><td class="summaryTableInheritanceCol">&nbsp;</td><td class="summaryTableSignatureCol"><a class="signatureLink" href="#EPSILON">EPSILON</a> : Number = 0.1<div class="summaryTableDescription">[static] margin for parallel determination in multi-point contact </div>
</td><td class="summaryTableOwnerCol">PolygonPolygonDetector</td>
</tr>
</table>
</div>
<script type="text/javascript" language="javascript">
<!--
showHideInherited();
--></script>
<div class="MainContent">
<a name="propertyDetail"></a>
<div class="detailSectionHeader">Property detail</div>
<a name="body1"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">body1</td><td class="detailHeaderType">property</td>
</tr>
</table>
<div class="detailBody">
<code>public var body1:<a href="../../../element/IBody.html">IBody</a></code><p> first body in detection </p></div>
<a name="body2"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">body2</td><td class="detailHeaderType">property</td><td class="detailHeaderRule">&nbsp;</td>
</tr>
</table>
<div class="detailBody">
<code>public var body2:<a href="../../../element/IBody.html">IBody</a></code><p> second body in detection </p></div>
<a name="minDistance"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">minDistance</td><td class="detailHeaderType">property</td><td class="detailHeaderRule">&nbsp;</td>
</tr>
</table>
<div class="detailBody">
<code>public var minDistance:Number</code><p> minimum distance along the pentration axis required to resolve penetration </p></div>
<a name="penetrationAxis"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">penetrationAxis</td><td class="detailHeaderType">property</td><td class="detailHeaderRule">&nbsp;</td>
</tr>
</table>
<div class="detailBody">
<code>public var penetrationAxis:<a href="../../../../math/Vector.html">Vector</a></code><p> most direct vector out of penetration </p></div>
<a name="constructorDetail"></a>
<div class="detailSectionHeader">Constructor detail</div>
<a name="PolygonPolygonDetector()"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">PolygonPolygonDetector</td><td class="detailHeaderParens">()</td><td class="detailHeaderType">constructor</td>
</tr>
</table>
<div class="detailBody">
<code>public function PolygonPolygonDetector(body1:<a href="../../../element/IBody.html">IBody</a>, body2:<a href="../../../element/IBody.html">IBody</a>)</code><p>
   Creates a new PolygonPolygonDetector
   
   </p><span class="label">Parameters</span>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20px"></td><td><code><span class="label">body1</span>:<a href="../../../element/IBody.html">IBody</a></code> &mdash; first body in detection
   </td>
</tr>
<tr>
<td class="paramSpacer">&nbsp;</td>
</tr>
<tr>
<td width="20px"></td><td><code><span class="label">body2</span>:<a href="../../../element/IBody.html">IBody</a></code> &mdash; second body in detection
   </td>
</tr>
</table>
</div>
<a name="methodDetail"></a>
<div class="detailSectionHeader">Method detail</div>
<a name="getContacts()"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">getContacts</td><td class="detailHeaderParens">()</td><td class="detailHeaderType">method</td>
</tr>
</table>
<div class="detailBody">
<code>public function getContacts():Array</code><p>
   Generates contacts based on found collision.
   
   </p><p>
   Given 2 convex polygons there are 3 different contact scenarios:
   <pre>
   1. Vertex - Edge
   2. Edge - Edge
   3. Vertex - Vertex
   </pre>
   The third (vertex-vertex) is so unlikely that we can disregard it all together. 
   Edge - edge is reduced from what can be seen as an infinite number of contact
   points (line on line), to 2 (innermost vertices). Vertex - edge works as is.
   </p>
   
   <p>
   First step in defining the contact point in world coordinates is resolving any
   penetration. Once resolved, the bodies' shared point(s) is the contact point(s).
   Each found point is built into a <code>Contact</code> instance and returned in an 
   Array.
   </p>
   
   <p>
   In determining contact points, we once again consider the 3 scenarios above. 
   Remembering that we're ignoring vertex - vertex, we're left needing a means to
   determine whether we're dealing with vertex - edge or edge - edge. What we do is
   iterate over each vertex, finding the point furthest along the <code>penetrationAxis</code>.
   In the more likely case of vertex - edge, we'll find 1 vertex on 1 body and 2 on the 
   other. The 2 constitute the body's edge involved in contact- This means we can take
   the single point on the other body as our point of contact. If, however, we find 2 
   points as the extreme on each body, we're dealing with edge - edge. In this scenario
   we use the middle 2 vertices involved as the 2 points of contact.
   </p>
   
   <p></p>
<span class="label">Returns</span>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20"></td><td><code>Array</code> &mdash; Array of contacts 
   
   </td>
</tr>
</table>
<p>
<span class="label">See also</span>
</p>
<div class="seeAlso">Contact<br>PhysicsEngine</div>
</div>
<a name="hasCollision()"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">hasCollision</td><td class="detailHeaderParens">()</td><td class="detailHeaderType">method</td><td class="detailHeaderRule">&nbsp;</td>
</tr>
</table>
<div class="detailBody">
<code>public function hasCollision():Boolean</code><p>
   Determines whether the 2 bodies are intersecting.
   
   </p><p>
   We check each axis as a contender for separation between the bodies. It's usually
   quite more likely in an application that objects AREN'T intersecting. For that 
   reason, this algorithm is constructed such that it terminates as soon as possible
   given non-intersection. It's good to think of collision as absolute worst case
   scenario- its detection and resolution are the most processor intensive aspects
   of FOAM.
   </p>
   
   <p></p>
<span class="label">Returns</span>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20"></td><td><code>Boolean</code> &mdash; true given penetration, false otherwise
   
   </td>
</tr>
</table>
<p>
<span class="label">See also</span>
</p>
<div class="seeAlso">
<a href="AxisProjection.html" target="">AxisProjection</a>
</div>
</div>
<a name="constantDetail"></a>
<div class="detailSectionHeader">Constant detail</div>
<a name="EPSILON"></a>
<table cellspacing="0" cellpadding="0" class="detailHeader">
<tr>
<td class="detailHeaderName">EPSILON</td><td class="detailHeaderType">constant</td>
</tr>
</table>
<div class="detailBody">
<code>public static const EPSILON:Number = 0.1</code><p> margin for parallel determination in multi-point contact </p></div>
<br>
<br>
<hr>
<br>
<p></p>
<center class="copyright"> 
</center>
</div>
</body>
</html>
<!-- -->
